第六周作业

4.1
target = 425
guess = 0
count = 0

print("猜数字游戏(1-1000)")
print("我已经想好了一个1-1000之间的数字,看你能猜几次猜中!")

while guess != target:
guess = int(input('请输入一个猜测的整数(1-1000): '))
count += 1

if guess > target:
    print(f'猜大了!这是你第{count}次猜测')
elif guess < target:
    print(f'猜小了!这是你第{count}次猜测')
else:
    print(f'恭喜你!猜对了!你一共猜了{count}次')

分析最少需要多少次猜测

min_guesses = 0
n = 1000
while n > 0:
min_guesses += 1
n = n // 2

print(f"\n使用二分查找策略,最少需要{min_guesses}次就能保证猜到任意1-1000的数字")
print("因为2^10=1024>1000,所以最多需要10次二分查找就能找到")

4.2

获取用户输入

s = input("请输入一行字符:")

初始化计数器

letters = 0 # 英文字符
digits = 0 # 数字
spaces = 0 # 空格
others = 0 # 其他字符

遍历字符串并统计

for char in s:
if char.isalpha(): # 判断是否为字母
letters += 1
elif char.isdigit(): # 判断是否为数字
digits += 1
elif char.isspace(): # 判断是否为空白字符
spaces += 1
else: # 其他字符
others += 1

输出结果

print(f"英文字符:{letters}个")
print(f"数字字符:{digits}个")
print(f"空格字符:{spaces}个")
print(f"其他字符:{others}个")

4.3

获取用户输入的两个整数

num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第二个整数:"))

计算最大公约数(GCD)

def gcd(a, b):
while b != 0:
a, b = b, a % b
return a

计算最小公倍数(LCM)

def lcm(a, b):
return a * b // gcd(a, b)

计算并输出结果

gcd_result = gcd(num1, num2)
lcm_result = lcm(num1, num2)

print(f"数字 {num1} 和 {num2} 的最大公约数是:{gcd_result}")
print(f"数字 {num1} 和 {num2} 的最小公倍数是:{lcm_result}")

4.4
import random

随机生成目标数字(0-1000)

target = random.randint(0, 1000)
guess = None
count = 0

print("猜数字游戏(0-1000)")
print("我已经想好了一个0-1000之间的数字,看你能猜几次猜中!")

while guess != target:
try:
guess = int(input('请输入一个猜测的整数(0-1000): '))
count += 1

    if guess < 0 or guess > 1000:
        print("请输入0-1000之间的数字!")
        continue
        
    if guess > target:
        print('猜大了')
    elif guess < target:
        print('猜小了')
    else:
        print(f'恭喜你!猜对了!你一共猜了{count}次')
        
except ValueError:
    print("请输入有效的整数!")

分析最少需要多少次猜测

min_guesses = 0
n = 1000
while n > 0:
min_guesses += 1
n = n // 2

print(f"\n提示:使用二分查找策略,最少需要{min_guesses}次就能保证猜到任意0-1000的数字")

4.5
import random

随机生成目标数字(0-1000)

target = random.randint(0, 1000)
guess = None
count = 0

print("猜数字游戏(0-1000)")
print("我已经想好了一个0-1000之间的数字,看你能猜几次猜中!")

while True:
user_input = input('请输入一个整数(0-1000): ')

# 验证输入是否为整数
if not user_input.lstrip('-').isdigit():
    print("输入内容必须为整数!")
    continue

guess = int(user_input)
count += 1

# 验证数字范围
if guess < 0 or guess > 1000:
    print("请输入0-1000之间的数字!")
    continue
    
# 判断猜测结果
if guess > target:
    print('猜大了')
elif guess < target:
    print('猜小了')
else:
    print(f'恭喜你!猜对了!你一共猜了{count}次')
    break

分析最少需要多少次猜测

min_guesses = 0
n = 1000
while n > 0:
min_guesses += 1
n = n // 2

print(f"\n提示:使用二分查找策略,最少需要{min_guesses}次就能保证猜到任意0-1000的数字")

4.6
year = int(input("请输入一个年份:"))

if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print(f"{year}年是闰年")
else:
print(f"{year}年不是闰年")

4.7
def get_valid_integer():
"""获取用户输入的合规整数"""
while True:
user_input = input("请输入一个十进制整数:")

    # 验证输入是否为纯数字(允许正负号)
    if (user_input.lstrip('-+').isdigit() and  # 数字检查
        len(user_input) == len(user_input.lstrip('-+')) + (1 if user_input.startswith(('-', '+')) else 0)):  # 符号检查
        
        try:
            number = int(user_input)
            return number
        except ValueError:
            print("输入转换失败,请重试!")
    else:
        print("输入格式错误!请确保输入的是纯数字整数(如123、-456等),不要包含其他字符。")

使用示例

valid_integer = get_valid_integer()
print(f"您输入的合规整数是:{valid_integer}")

4.8
import re

def is_valid_float(input_str):
"""验证是否为合规的小数格式"""
pattern = r'[1]?[0-9]*.?[0-9]+$'
return bool(re.fullmatch(pattern, input_str))

while True:
user_input = input("请输入一个浮点数(不接受科学计数法):")

if is_valid_float(user_input):
    try:
        number = float(user_input)
        print(f"您输入的合规浮点数是:{number}")
        break
    except:
        print("输入转换失败,请重试!")
else:
    print("输入格式错误!请确保输入的是标准小数格式(如3.14、-0.5等),不要使用科学计数法。")

  1. -+ ↩︎

posted @ 2025-04-04 15:51  Neflibata。  阅读(53)  评论(0)    收藏  举报